import router from '@/router'
import { useLoginUserStore } from '@/stores/useLoginUserStore.ts'
import { message } from 'ant-design-vue'

// 是否为首次获取登录用户
let firstFetchLoginUser = true

/**
 * 全局权限校验，每次切换页面时都会执行
 */
router.beforeEach(async (to, from, next) => {
  const loginUserStore = useLoginUserStore()
  let loginUser = loginUserStore.loginUser
  // 确保页面刷新时，首次加载时，能等待后端返回用户信息后再校验权限
  if (firstFetchLoginUser) {
    try {
      await loginUserStore.fetchLoginUser()
      loginUser = loginUserStore.loginUser
    } catch (error) {
      console.warn('获取用户信息失败，可能是后端服务未启动:', error)
      // 即使获取用户信息失败，也继续导航，但将用户视为未登录
      loginUser = { userName: '未登录' }
    }
    firstFetchLoginUser = false
  }
  const toUrl = to.fullPath
  
  // 定义需要登录的页面路径
  const requireLoginPaths = [
    '/add_picture',
    '/add_space', 
    '/my_space',
    '/admin'
  ]
  
  // 定义公开访问的页面路径（不需要登录）
  const publicPaths = [
    '/',
    '/search_picture',
    '/user/login',
    '/user/register',
    '/space_analyze'  // 空间分析允许公开访问（但具体功能会根据参数限制）
  ]
  
  // 检查是否为公开页面
  const isPublicPath = publicPaths.some(path => toUrl.startsWith(path))
  
  // 如果是公开页面，直接允许访问
  if (isPublicPath) {
    next()
    return
  }
  
  // 管理员页面权限检查
  if (toUrl.startsWith('/admin')) {
    if (!loginUser || !loginUser.id) {
      message.warning('请先登录')
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }
    if (loginUser.userRole !== 'admin') {
      message.error('需要管理员权限')
      next('/')
      return
    }
  }
  
  // 其他需要登录的页面
  const needLogin = requireLoginPaths.some(path => toUrl.startsWith(path))
  if (needLogin && (!loginUser || !loginUser.id)) {
    message.warning('请先登录')
    next(`/user/login?redirect=${to.fullPath}`)
    return
  }
  
  next()
})
